package design_pattern.SingleThreadExecute;

/**
 * @Author: 蔡翔
 * @Date: 2019/11/2 20:24
 * @Version 1.0
 * // 有一个门 始终只能有一个人通过。
 *
 * 在实际开发中： Gate 就相当于一个资源（被多个线程消费），而User就相当于消费者。
 * 共享资源
 */
public class Gate {
    private int counter = 0;
    private String name = "Nobody";
    private String address = "NoWhere";

    /**
     * 临界值
     * */
    public synchronized void pass(String name,String address){
        counter++;
        // 存在资源竞争
        this.name = name;
        this.address = address;
        //核对会不会有问题
        verify();
    }

    private void verify() {
        if(this.name.charAt(0) != this.address.charAt(0)){
            System.out.println("*********BROKE********"+toStrings());
        }
    }

    public String toStrings(){
        return "No."+counter+":"+name+","+address;
    }
}
